#!/bin/bash
#当build后部署在与jenkin相同的本机环境时，可以把下面的shell脚本copy到JENKINS配置中进行自动化部署

DC_HOME="/usr/local/bin"

DEPLOY_DIR="/root/app_docker"

OLD_VERSION_BAK_DIR="/root/app_docker/bak"

if [[ ! -d "${DEPLOY_DIR}" ]]; then
  mkdir -p "${DEPLOY_DIR}"
fi

if [[ ! -d "${OLD_VERSION_BAK_DIR}" ]]; then
  mkdir -p "${OLD_VERSION_BAK_DIR}"
fi

cp docker-compose.yml ${DEPLOY_DIR}

# 因为docker-compose up时会检查配置的项目的文件夹是否存在，
# 如果是第一次部署，很可能相关项目的目录没有完全创建，所以先进行项目目录的创建
createDir() {
	DEPLOY_MODULE_DIR="${DEPLOY_DIR}/$1"
	# 判断部署目录中目标文件夹是否存在
	if [ ! -d "$DEPLOY_MODULE_DIR" ]; then
		echo "target dir: $DEPLOY_MODULE_DIR not found, create it"
		mkdir -p $DEPLOY_MODULE_DIR
	fi
}

deploy() {
	cd /var/lib/jenkins/workspace/spring-cloud-alibaba-demo
	echo "============================= begin deploy $1 =============================="
	CURRENT_MODULE_PATH=`ls $1/target/$1*.gz`
	CURRENT_MODULE_FILENAME=${CURRENT_MODULE_PATH##*/}
	echo "source file name: $CURRENT_MODULE_FILENAME"
	
	DEPLOY_MODULE_DIR="${DEPLOY_DIR}/$1"
	
	echo "target dir: $DEPLOY_MODULE_DIR"
	
	TARGET_FILE=${DEPLOY_DIR}/${CURRENT_MODULE_FILENAME}

	# 判断部署目录中目标文件是否存在. 如果不存在,说明该子模块时新编译的版本，需要进行重新部署
	if [ ! -f "$TARGET_FILE" ]; then

		# 判断部署目录中目标文件夹是否存在
		if [ -d "$DEPLOY_MODULE_DIR" ]; then
		  # 停止旧版本服务容器
		  echo "=== begin stop and remove docker container: $1 ==="
		  docker stop $1 && docker rm $1 
		  echo "=== end   stop and remove docker container: $1 ==="
		  # if中用了通配符，所以需要双中括号
		  if [[ -f "${DEPLOY_MODULE_DIR}*.gz" ]]; then
			  echo "backup $1"
			  mv ${DEPLOY_MODULE_DIR}*.gz ${OLD_VERSION_BAK_DIR}		  
		  fi
		  
		  # 删除旧版本的服务文件夹
		  echo "delete ${DEPLOY_MODULE_DIR}"
		  rm -rf ${DEPLOY_MODULE_DIR}
		fi

		echo "deploy ${CURRENT_MODULE_FILENAME} into ${DEPLOY_DIR}"
		cp $1/target/$1*.gz ${DEPLOY_DIR}
		tar zxf ${TARGET_FILE} -C ${DEPLOY_DIR}
		cd ${DEPLOY_DIR}
		${DC_HOME}/docker-compose --compatibility up --build -d $1
	else
		echo "target file exists, no need to deploy"
	fi
	echo "============================= end   deploy $1 =============================="
	echo ""
}


MODULE_LIST="provider-service-by-rocketmq consumer-service-by-rocketmq"

for module in $MODULE_LIST;  
do  
	createDir $module
done

for module in $MODULE_LIST;  
do  
	deploy $module
done

